The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, the approaches described in this section may not be prior art to the claims in this application and are not admitted to be prior art by inclusion in this section.
A software/application container (“container”) is a type of Operating System (OS)-level virtualization technique that allows an application and its dependencies to run as resource-isolated processes. That is, a container is a lightweight, stand-alone, executable package that includes everything needed to run the software, including code, runtime, system tools, system libraries, settings, etc. Unlike Virtual Machines (VM), containers have no need for embedded operating systems and calls are made for operating system resources via an Application Program Interface (API).
The lightweight and portability properties of containers make them well suited for deploying many different types of services, such as microservices, in networks. For example, container-based micro-services are being widely adopted in the Data Center/Cloud Industry where, rather than building a single large, monolithic application, the container-based micro-services split the application into a set of smaller interconnected services.
One of the issues with using containers in computer networks is that containers are decoupled from physical computer networks and network switches are not container aware, and therefore must be manually configured to enable networking functionality. This must be done for each new container after deployment and anytime container attribute values are changed, for example, after container IP address or port number is changed, which is burdensome and prone to errors.